package es.ikex.dao;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;

import es.ikex.modelo.Cliente;

public class ClienteDAO extends ConexionDAO {
	
	private static final String INSERT_STATEMENT = 
		"insert into clientes " +
		"(codigo,nombre,apellido,NIF_NIE,direccion,CodigoPostal,telefono," +
		"fechaNacimiento,fechaIntro,email) values(?,?,?,?,?,?,?,?,?,?);";
	private static final String UPDATE_STATEMENT = 
		"update clientes set Nombre=?,Apellido=?, Direccion=?, CodigoPostal=? ,Telefono=?, email=?,NIF_NIE=? where Codigo=?";
	
	
	public int crearCliente(Cliente cliente) {
		int key = 0;
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select max(Codigo) as ultimo from usuarios");
			
			while(resultado.next()){
				key = resultado.getInt("ultimo");
			}
			
			preparada = conexion.prepareStatement(INSERT_STATEMENT);
			preparada.setInt(1, key);
			preparada.setString(2, cliente.getNombre());
			preparada.setString(3, cliente.getApellidos());
			preparada.setString(4, cliente.getNifNie());
			preparada.setString(5, cliente.getDireccion());
			preparada.setString(6, cliente.getCodigoPostal());
			preparada.setString(7, cliente.getTelefono());
			String[] f = cliente.getFechaNacimiento().split("/");
			String cadenaFecha = f[2] + "-" + f[1] + "-" + f[0]; 
			preparada.setString(8, cadenaFecha.toString());
			Calendar calendario = GregorianCalendar.getInstance();
			java.util.Date fecha = calendario.getTime();
			SimpleDateFormat formatoDeFecha = new SimpleDateFormat("yyyy-MM-dd");
			preparada.setString(9, formatoDeFecha.format(fecha));
			preparada.setString(10, cliente.getCorreo());
			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return key;
		
	}

	
	public void actualizarCliente(Cliente cliente){
		try {
			getConexion();
			
			preparada = conexion.prepareStatement(UPDATE_STATEMENT);
			preparada.setString(1, cliente.getNombre());
			preparada.setString(2, cliente.getApellidos());
			preparada.setString(3, cliente.getDireccion());
			preparada.setString(4, cliente.getCodigoPostal());
			preparada.setString(5, cliente.getTelefono());
			preparada.setString(6, cliente.getCorreo());
			preparada.setString(7, cliente.getNifNie());
			preparada.setInt(8, cliente.getCodigo());	
			

			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
	}
	
	public ArrayList<Cliente> getCliente(String idPedido){
		ArrayList<Cliente> clienteList = new ArrayList<Cliente>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select pedidos.Fecha, NumeroPedido, CodigoCliente, Codigo, Nombre, Apellido, NIF_NIE, pedidos.Direccion, pedidos.CodigoPostal, Telefono" +
					" from clientes inner join pedidos on Codigo=CodigoCliente where NumeroPedido='"+idPedido+"'");
			
			while(resultado.next()){
				Cliente cliente = new Cliente();
				cliente.setApellidos(resultado.getString("Apellido"));
				cliente.setCodigoPostal(resultado.getString("CodigoPostal"));
				cliente.setNombre(resultado.getString("Nombre"));
				cliente.setNifNie(resultado.getString("NIF_NIE"));
				cliente.setDireccion(resultado.getString("Direccion"));
				cliente.setTelefono(resultado.getString("Telefono"));
				cliente.setFechaNacimiento(resultado.getString("Fecha"));
				clienteList.add(cliente);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return clienteList;
	}
}
